Más cosas con Quarto

(Web del curso aquí)

20 de mayo de 2024

Con Quarto se pueden hacer muu🙀uuchas más cosas!!!



Veamos algunas de ellas

6.1 Subir nuestra web a la UV

  • Una vez hemos generado nuestra web en local con Quarto nos queda subirla a Internet. La documentación oficial de Quarto está aquí


  • Hay muchos servicios de alojamiento, puedes ver algunos de ellos aquí.

  • Por ejemplo, aquí explican las ventajas y cómo subir una web a Netlify.


  • Pero … nosotros tenemos un espacio en la web de la UV, así que …

Práctica: Subir nuestra web

Tarea 6.1a: Subir nuestra web

  • Sí, tienes que subir nuestra web a nuestro espacio en el servidor web de la UV
  • Para subir nuestra web a nuestro espacio UV, solo tenemos que subir los ficheros de la carpeta docs o _site a la web de la UV

  • Pero antes, hay que tener activado vuestro espacio web en UV. Veamos cómo hacerlo con este post

  • Perfecto!!, pero, imagina que te vas a un congreso y ahora quieres subir unas slides para poder hacer la presentación desde la web. ¿Cómo lo haces?

Tarea 6.1b: Subir unas slides

  • Sí, tienes que subir unas revealjs slides a tu espacio web en la UV
  • Si has hecho las slides autocontenidas, entonces sólo tendrás que subir el fichero my_slides.html a tu espacio web en la UV

  • Consejo: yo alojaría las slides en un directorio llamado slides o presentaciones o algo similar

6.2 Gestión de bibliografia

  • Imagina que queremos incorporar referencias bibliográficas en uno de nuestros post; y además queremos referenciarlas en el cuerpo del artículo ¿te suena, no?

Además,

  • no queremos tener que copiar a mano las referencias y

  • tampoco queremos tener que cambiar el formato 😱😱 de las referencias si es que decidimos cambiar de revista


¿Cómo lo hacemos?

  • Os lo cuento en este post, y vamos a practicarlo con una tarea

Práctica: Gestión de bibliografía

  • Para ello, vamos a utilizar el archivo: ./tareas/tarea_6.2_biblio.qmd que puedes encontrar en el “Qproj_01_eurovision” que puedes descargarte aquí

Tarea 6.2: Incorporar y gestionar referencias bibliográficas

  • Resulta que ya tenemos el documento .bib con la información de nuestras refrencias. Está en: ./assets/refrences.bib

  • Tenemos que referenciar el documento .bib en el yaml del .qmd. Algo como:

bibliography: <ruta-a-my_references.bib>


  • Pero … tenéis que pensar como poner la ruta a: ./assets/references.bib


  • Una vez hecho, procesa el .qmd . ¿Qué ha pasado? ¿Se han incorporado las referencias?

  • No. ¿Por qué? 🤔

  • Por defecto solo se muestran las referencias que hemos utilizado en nuestro .qmd

  • Así que, vamos a incorporar en el texto de nuestro .qmd algunas alusiones a nuestras referencias.

  • Para ello vamos a utilizar el editor Visual de RStudio.

  • Ahora vamos a añadir una nueva referencia a nuestro fichero .bib. Por ejemplo esta

  • Para ello, también vamos a usar el editor Visual de RStudio

  • Insertemos una alusión a esta nueva referencia en el texto de nuestro .qmd; si no, no apareceré en el listado de referencias.

  • Por defecto Pandoc, y por ende Quarto, usa el “Chicago Manual of Style”, pero podemos cambiarlo.

  • Por ejemplo, vamos a cambiar el estilo de las referencias a “American Psychological Association”

  • Para ellos hay que obtener/usar un archivo CSL (Citation Style Language)

  • Puedes obtener ficheros .csl para multitud de formatos aquí. Solo tenemos que buscar el estilo que queremos y descargarlo.

  • Por ejemplo, nos descargamos el fichero para el formato APA 7th edition. Este es el enlace de descarga

  • Para usar el archivo .csl que acabamos de descargar hay que referenciarlo en el yaml, añadiendo algo como:

csl: <ruta-a-my-fichero.csl>
  • Vuelve a procesar el .qmd. ¿Qué ha pasado? ¿Se han cambiado las referencias?



6.3 Generar el mismo documento en múltiples formatos

  • Sí, una de las múltiples ventajas de Quarto es que, con un mismo documento .qmd (o documento fuente) podemos generar documentos en múltiples formatos. Por ejemplo, .html, .docx, .pdf, .epub etc.


¿Cómo? Solo hay que hacer 2 cosas :
  1. especificarlo en el YAML, por ejemplo:

    title: Mi documento
    author: Pedro J. Pérez
    toc: true
    format: 
      html: default
      epub: default
      docx: default
  2. El render del documento se ha de hacer desde la Terminal:

    quarto render mi-multi-format-document.qmd

Múltiples formatos (más posibilidades)


Render, con opciones, desde la Terminal

  • Otra posibilidad es hacer el Render desde la Terminal con opciones. Algo como:

    quarto render my-document.qmd --to pdf
    
    quarto render tareas/tarea_6.3_varios-formatos.qmd --to epub


Otra posibilidad

  • Los documentos .html que generemos, ya sean estos documentos individuales o dentro de una web, pueden incluir links al mismo documento en otros formatos. Documentación aquí.

  • El YAML del documento tendría que quedar algo como:

    format: 
      html: default
      docx: default
    format-links: [docx]

Práctica: Documentos con varios formatos


Tarea 6.3: Obtener varios formatos con el mismo .qmd

  • Procesa el documento: ./tareas/tarea_6.3_varios-formatos.qmd. Lo puedes encontrar en el “Qproj_01_eurovision” que puedes descargarte aquí

  • Fíjate que el yaml ya está preparado para generar 2 formatos: .html y .docx

  • Recuerda que hay que hacer el Render desde la Terminal 🤔

  • En la terminal has de escribir algo como:
quarto render tareas/tarea_6.3_varios-formatos.qmd

6.4 Ejercicios interactivos

  • Hay varios paquetes como learnr que permiten incorporar ejercicios interactivos a documentos .html generados con Quarto, pero …
      … tienen un inconveniente: los tutoriales deben ser ejecutados locamente
          o alojados en un servidor shiny


  • El paquete webexercises soluciona ese problema ya que genera “standalone HTML files that require only a JavaScript-enabled browser”.

  • El objetivo de webexercises es:

To enable instructors to easily create interactive web pages that students can use in self-guided learning

Práctica: Ejercicios interactivos con webexercises


Tarea 6.4: Jugar un poco con webexercises

  • Abre el documento: tareas/tarea_6.4_webexercises.qmd que puedes encontrar en el “Qproj_01_eurovision” que puedes descargarte aquí

  • Mira su contenido

  • Procesa el documento

  • Abre el documento html que se ha generado y … trata de resolver las preguntas

  • Añade una nueva pregunta


```{{r}}
#| results: asis
opts <- c(
   "Quarto es cuatro en balinés",
   answer = "Un sistema de publicación científico-técnica de acceso abierto que es lo más!!!",
   "Quarto es una marca de muebles sueca"
)

cat("¿Qué es Quarto?", longmcq(opts))
```


  • Para usar el paquete hay que instalarlo, por ejemplo con: pak::pak("webexercises")


  • Para procesar correctamente los ficheros “webexercises” hay que tener los .css y .js necesarios. Para ello:

    webexercises::add_to_quarto(include_dir = "assets/webexercises")
    • Cuidado porque genera ruta a los assets en el YAML del fichero .qmd, pero también en el fichero _quarto.yml (mejor quitarlos de _quarto.yml)


  • Nosotros ya teníamos una plantilla “webexercises” en la carpeta ./tareas/tarea_6.4_webexercises.qmd. La creé con algo como:

    webexercises::create_quarto_doc(name = "my_titulo", open = interactive())

6.5 Incorporar tablas

  • A veces veces tenemos unos datos, o un listado de algo como: tareas, estudiantes, calendario etc… en un fichero Excel, o Google Sheet, que queremos incorporar a nuestros documentos, ¿Cómo lo hacemos?
  • Si tenemos los datos en el fichero datos/matriculados.xlsx solo habría que:
```{r}
df <- rio::import("./datos/matriculados.xlsx")
gt::gt(df)
```
```{r}
df <- rio::import("./datos/matriculados.xlsx")
DT::datatable(df)
```


Si los datos los tuviesemos en Google Sheets:

# googlesheets4::gs4_deauth() #- si tuvieses q autorizar
my_url <- "https://docs.google.com/spreadsheets/d/16XpV9I0_hoyPqV6o7Pkir4c_mmwgHM4UuGXuM7t7vUc/edit?usp=sharing"
df <- googlesheets4::read_sheet(my_url)
gt::gt(df)


  • Un ejemplo en esta web. Es un curso de Mine Çetinkaya-Rundel en el que el calendario de sesiones se carga desde un archivo de Google Sheets. El código para hacer la tabla puedes verlo aquí. El documento de Google está aquí

6.5 Un poco más de tablas


¿Cómo hacer tablas más chulas?

  • En este post explica en detalle cómo se pueden hacer tablas muy chulas con R


Tablas estadísticas

  • Muchas veces hay que presentar los resultados de contrastes o de la estimación de modelos estadísticos. En estos casos, las tablas son una herramienta muy útil para presentar los resultados de una manera clara y concisa.


  • Vamos a profundizar en ello con este post del blog

6.6 Informes parametrizados

  • A veces necesitamos generar informes con datos diferentes. Por ejemplo, un informe de ventas de diferentes productos, o un informe para cada municipio, o un informe para cada periodo

  • En este post del blog se explica cómo hacerlo.


  • Muchas veces es más fácil hacerlo que contarlo, así que:

Tarea 6.6: Aprender a hacer informes parametrizados

  • Para ello, vamos a usar el Qproject llamado “Qproj_02_param-rep” que puedes descargarte aquí


6.7 “Reutilizar” unas slides

  • Imagina que has visto unas slides chulisimas y quieres copiarlas inspirarte en ellas para hacer las tuyas propias. ¿Cómo lo haces?
  • Es muy habitual que la comunidad R comparta el código de sus materiales; principalmente en GitHub



Tarea 6.7: Aprender a “reutilizar” materiales

  • Vamos a reutilizar el código de una de las 2 slides anteriores.

  • Sí, se aprende mucho viendo el código de otros

Con Quarto se pueden generar muu🙀uuchos FORMATOS distintos!!!



El curso se ha centrado en la realización de documentos .html pero desde Quarto se pueden generar documentos en múltiples formatos. Veamos algunos de ellos!!!

Journal articles

  • Tenemos disponibles plantillas para generar, directamente desde Quarto, documentos en el formato adecuado para un conjunto de Journals.
  • Puedes ver el listado de Journals aquí y aquí. La documentación oficial la tienes aquí

Extensión: más sobre publicación en Journals desde Quarto

  • La extensión de Quarto apaquarto provee una template para crear documentos APA Style 7th Ed en .docx, .html. y .pdf. La web del proyecto está aquí.

  • If you want to type in markdown to create a document in the “APA 6th Ed”, I suggest using papaja

  • Hay otra extensión: apaish que permite crear documentos pdf en el estilo de la APA 7th ed. via Typst. Tiene varios tipos: manuscript, document, and Journal (Similar to the APA7 LaTeX package, but Typst produces them much faster and easier)

  • En Rmarkdown tenemos el paquete rticles con plantillas para generar documentos de un conjunto amplio de Journals

  • Un hilo de Mastodon con las vicisitudes de M. Mahoney para publicar en Elsevier desde Quarto:

  • Journals para publicar código.

  • Esta charla de Mine Çetinkaya-Rundel habla de este tema en el minuto 14 aprox.

  • Cómo crear una Quarto Journal Article Templates

Tarea: Practicando con Journal articles

  • Primero vamos a generar un paper para JSS (Journal of Statistical Software), y después generaremos un artículo para Elsevier

El repo para la plantilla/extensión está aquí

  1. Instalar la extensión: hay que ejecutar en la Terminal:

    quarto use template quarto-journals/jss
  2. Ver qué se ha creado en el Qproject

  3. Procesar el archivo templates.qmd que se ha creado

  • El repo para la plantilla/extensión está aquí. Tiene muchas más variantes y opciones!!
  1. Instalar la extensión: hay que ejecutar en la Terminal:

    quarto use template quarto-journals/elsevier
  2. Ver qué se ha creado en el Qproject

  3. Procesar el archivo elsevier.qmd que se ha creado

  4. Hay muchas más opciones

Curriculums con Quarto

Desde Quarto se pueden hacer curriculums. Por ejemplo:

CV’s con Quarto

Convertir CV’s a Quarto

  • Tengo el CV en un .docx ¿puedo pasarlo a Quarto? Sí, aquí la explicación. Aconsejan pasarlo primero a Google doc’s

  • Para convertir un Google Doc en un Quarto book puedes usar el pkg quartificate

Extensión: CV’s con .Rmd

Posters con Quarto

Ahora ya es posible hacer posters con Quarto, pero la gente estaba esperando hace tiempo. Por ejemplo:

  • Póster de Lorena Abad aquí

  • Typst-poster. Lo vi en este video, concretamente en el minuto 7:30

  • Una plantilla para crear un typst poster de David Schoch aquí. El toot.


Extensión: Posters con Rmarkdown

Typst con Quarto

  • Un video de C. Scheidiger en posit::conf(2023). Cuenta los pb’s de Latex y espera que Typst lo reemplace. Ventajas en el minuto 4:40. Sólo hay que cambiar a format: typst

  • Rennie tyspt o latex: el toot, sus charlas. No funcionan, pero esta sí, esta tb

  • Plantillas tyspt de Weis aquí. Hay muchas templates de tysp

Más formatos con Quarto

  • Plantillas para varios formatos: cv, list of publicaciones, letter y un timer: aquí

  • El paquete labeleR permite crear certificados de asistencia, badges, …

  • Plantillas para tesis aquí. Más recursos para thesis aquí

Más formatos con .Rmd





Trabajando con documentos WORD


  • officer: The officer package lets R users manipulate Word (.docx) and PowerPoint (*.pptx) documents. In short, one can add images, tables and text into documents from R.


  • docxtractr: Extract Data Tables and Comments from Microsoft Word Documents. Aquí un post sobre su uso.

Plantillas/cosas de pdf’s

  • Plantillas para hacer pretty pdfs: aquí y aquí

  • Plantilla para compact pdf

  • Nicola Rennie te dice cómo hacer pdfs parámetrizados: aquí

  • Quarto YouTube Playlist

  • Title Pages templates for adding a cover page to your Quarto pdf books. Un ejemplo

  • Great looking pdf with pagedown: vídeo aquí



Otras plantillas

Con Quarto AÚN se pueden hacer muu🙀uuchas más cosas!!



Veamos algunas de ellas

Diagramas (con Mermaid y Graphviz)

  • Quarto permite hacer diagramas con Mermaid y Graphviz. Lo que, según la documentación oficial, posibilita la creación de flowcharts, sequence diagrams, state diagrams, Gantt charts, and more usando una sintaxis (de texto) similar a Markdown.
  • Un ejemplo:


El código

```{mermaid}
flowchart LR
  qmd --> J([Jupyter])
  qmd --> K([knitr])
  J --> md
  K --> md
  md --> P([pandoc])
  P --> pdf
  P --> html
  P --> docx
```

El resultado:

flowchart LR
  qmd --> J([Jupyter])
  qmd --> K([knitr])
  J --> md
  K --> md
  md --> P([pandoc])
  P --> pdf
  P --> html
  P --> docx


Diagramas (con Mermaid y Graphviz)
  • Otro ejemplo
```{mermaid}
gantt
dateFormat  YYYY-MM-DD
title Adding GANTT diagram to mermaid
excludes weekdays 2014-01-10

section A section
Completed task            :done,    des1, 2014-01-06,2014-01-08
Active task               :active,  des2, 2014-01-09, 3d
Future task               :         des3, after des2, 5d
Future task2              :         des4, after des3, 5d
```

gantt
dateFormat  YYYY-MM-DD
title Adding GANTT diagram to mermaid
excludes weekdays 2014-01-10

section A section
Completed task            :done,    des1, 2014-01-06,2014-01-08
Active task               :active,  des2, 2014-01-09, 3d
Future task               :         des3, after des2, 5d
Future task2              :         des4, after des3, 5d


  • En los “mermaid diagramms”, se pueden utilizar themes en los. Documentación aquí

  • Ejemplos más complejos de Mermaid aquí

  • Ejemplos de GraphViz aquí


Countdown

  • Incluir un reloj para hacer cuentas atrás cuando pones un ejercicio a resolver en clase. Documentación aquí


Tarea: Incorporar un “countdown” a un documento .qmd

```{r}
# devtools::install_github("gadenbuie/countdown")
countdown::countdown(minutes = 0, seconds = 44)
```

Crear un glosario de términos

  • El paquete glossary permite crear un glosario de términos al final de un documento .html y referenciar términos del glosario en el texto.
  • ¿Cómo? No he llegado a probarlo pero básicamente tienes que
     - crear el glosario de términos en un documento .yml,
     - proporcionar su ruta a la función glossary_path()
  • Para añadir un término al glosario:
glossary_add(term = "Ishi",
             def = "Ishi fue el nombre dado al último miembro de la tribu de los yahi de California, Estados Unidos. La palabra ishi significa hombre en idioma yahi."
  • Para referenciar palabras del glosario en el texto, se hace algo como:

Se considera a glossary::glossary("Ishi") el último nativo de la California septentrional que vivió fuera de la influencia de la cultura occidental. Su historia se popularizó a raíz de un libro de Theodora Kroeber, madre de Ursula K. Le Guin.

  • Además, puedes definir el estilo del glosario con glossary_style(). Por ejemplo:
glossary::glossary_path("psyteachr.yml")
glossary::glossary_style("purple", "underline")


Crear botones de descarga

  • Se trata de crear unos botoncitos (chulos!!) en nuestra web que sirvan para descargarse los documentos (o recursos) que queramos


  • Vamos a probar a hacer estos botones con la extensión downloadthis.

  • Para ello vamos a usar la documentación de la extensión y este post del blog del curso.

Extensiones

  • En el curso se habla de las extensiones. En las slides nº 5, concretamente aquí y en este post y en este otro

  • Aquí un post que cuenta como hacer extensiones

  • Por ejemplo podemos probar a usar la extensión fontawesome.


Algunas extensiones chulas:

  • code-fullscreen: permite que al pinchar en un bloque de código, este pase a estar a pantalla completa

  • nustshell: permite crear “expandable explanations”. Lo mejor es pinchar y ver los ejemplos

  • collapse-social-embeds: permite crear 6 tipos de nuevos callouts para social contents (Github gist, Twitter tweets, Mastodon toots, y vídeos de Loom, Vimeo y Youtube). Puedes ver un ejemplo aquí. Seguramente acabaré usándolo en el curso!!

  • downloadthis: permite crear botones de descargar muy chulos. Ya la hemos usado

  • pointer y quarto-spotlight: 2 extensiones para iluminar/agrandar el puntero del ratón en revealjs slides

  • line-highlight: similar a code-line-numbers pero ahora es para documentos html, no para RevealJs slides

  • webR: permite to run R code in the browser without the need for an R server to execute the code!!

  • Sverto: permite incorporar Svelte components that can seamlessly react to your ObservableJS code!!!

  • quarto-animate: permite crear unas animaciones muy “aparatosas”. Puedes ver un ejemplo aquí

Trucos CSS y SASS


  • En el improbable caso de que tengamos tiempo, veremos algunos trucos para tunear algunos aspectos de nuestros documentos y web/blog


  • Lo haríamos con este post del blog de “truqillos” del curso

AÚN 🙀 más cosas!!!



Ejemplos que se me han quedado en el tintero (quizás para otra edición)

Runing Stata in Quarto documents

Tampoco lo he probado, entre otras cosas porque no tengo Stata instalado, pero :


  • Podemos correr código de Stata en Quarto document: aquí se explica cómo usando un paquete de Phyton, pystata.


  • Stata Facade: una extensión de Quarto that hides the evidence of faking Stata dynamic content with Python code blocks and Stata cell magic.


Runing SPSS in Quarto documents


No he visto que sea posible correr SPSS code dentro de R, pero para que tenemos R GUI’s. Otra comparación de GUI’s. Un post sobre Jamovi

Shiny en Quarto

Queries to bibliographc databases

  • openalexR: “helps you interface with the OpenAlex API to retrieve bibliographic infomation about publications, authors, venues, institutions and concepts

  • rscielo: “offers functions to easily scrape bibliometric information from scientific journals and articles hosted on the Scileo Platform

  • JCRImpactFactor: “JCRImpactFactor: Journal Citation Reports (‘JCR’) Impact Factor by Clarivate Analytics”

  • Scrapping WOS

  • Bibliometrix: “bibliometrix package provides a set of tools for quantitative research in bibliometrics and scientometrics”

  • RISmed: A set of tools to extract bibliographic content from the National Center for Biotechnology Information (NCBI) databases, including PubMed.

Ejemplitos (de copiar y hacer)

pak::pak('rstudio/pagedown')